package com.shop.pojo.pms;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.shop.valid.AddGroup;
import com.shop.valid.ShowStatus;
import com.shop.valid.UpGroup;
import com.shop.valid.UpStatusGroup;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.URL;

import javax.validation.constraints.*;
import java.io.Serializable;

/***
 * JSR303验证
 * 1.首先导入所需的依赖 validation-api hibernate-validator
 * 2.进行需求注解填写在实体类属性上
 * 3.如果需要用到这边的设置 需要在Controller内获取参数时添加 @valid 注解运行调用
 *
 * 自定义校验信息 message = ""
 * 在注解内进行 message的值填写
 * 在Controller内除了@valid 还需要在添加一个BindingResult调用里面的状态进行遍历取出
 *
 * 异常处理类 ExceptionControllerAdvice
 * 把controller内的获取错误方法提出封装一个异常类
 * 这个异常类内 需要首先进行注解 @RestControllerAdvice 是 @RestBody + @Controller + @ControllerAdvice注解的组成
 * 内置的参数是 basePackages进行那个包下类的异常处理 对应的是我们的Controller层
 * 我们Controller层就不需要在方法接收内填写 BindingResult 而是通过@valid注解把异常抛给 异常处理类
 * 异常处理类进行处理 @ExceptionHandler 标注方法 方法内定义value标注这个方法是处理什么异常的
 * 在方法内部进行创建 BindingResult 获取返回的异常信息
 *
 * 自定义异常状态码
 * 创建一个工具类进行异常处理码的设置
 *
 * 分组校验 groups = {,,}
 * 需要我们自己定义分组 接口 在属性注解内使用(groups = {分组接口1.class,分组接口2.class,})
 * 在Controller内需把@valid 修改成 @Validated({分组信息的指定}),
 * 但凡没有属性注解配置分组的 一旦controller应用了分组 那么没有分组的便不再生效
 *
 *
 * 自定义校验器
 * 首先编写一个校验器的自定义注解 在编写自定义校验类 关联自定义校验器和校验类的注解
 *
 */


//品牌
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("pms_brand")
public class Pms_Brand implements Serializable {

    @TableId(type = IdType.AUTO)
    @Null(message = "添加时不能指定ID", groups = {AddGroup.class})
    @NotNull(message = "修改时ID不能为空", groups = {UpGroup.class})
    private Long brand_id;//品牌id',
    @NotBlank(message = "品牌名不能为空", groups = {AddGroup.class, UpGroup.class})
    private String name;//品牌名
//    @NotEmpty(message = "地址不能为空", groups = {AddGroup.class})
    @URL(message = "请传入一个合法的logo地址", groups = {AddGroup.class})
    private String logo;//,品牌logo地址'

    private String descript;//介绍'

    @NotNull(message = "显示状态不能为空",groups = {UpStatusGroup.class})
    //自定义注解[0不显示-1显示]
//    @ShowStatus(value = {0,1},message = "显示状态只能是0或1",groups = {AddGroup.class, UpGroup.class,UpStatusGroup.class})
    private int show_status;//显示状态[0-不显示；1-显示]',

    @NotEmpty(message = "检索首字母不能为空", groups = {AddGroup.class, UpGroup.class})
    @Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个字母", groups = {AddGroup.class, UpGroup.class})
    private String first_letter;//检索首字母',
    @NotNull(message = "排序不能为空", groups = {AddGroup.class})
    @Min(value = 0, message = "排序必须大于等于0", groups = {AddGroup.class, UpGroup.class})
    private int sort;//排序',
}
